package servlets;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.naming.NamingException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import parser.ParserXML;
import businessdelegate.FacadeBusinessDelegate;
import entitiesdto.*;

public class NuevoArticuloSVL extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
	static final long serialVersionUID = 1L;

	public NuevoArticuloSVL() {
		super();
	}   	

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request,response);
	}  	

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		String action = (String) request.getParameter("action");

		if (action != null && action.equals("LoadXML")){
			this.leerArchivo(request,response);
		}

		if (action != null && action.equals("Agregar")){
			this.agregarMateriaPrima(request,response);
		}

		if (action != null && action.equals("GUARDAR ARTICULO")){
			this.guardarArticulo(request,response);
		}

	}

	@SuppressWarnings("unchecked")
	public void agregarMateriaPrima (HttpServletRequest request, HttpServletResponse response)
	{
		HttpSession session = request.getSession(true);

		String materia = request.getParameter("selectMaterias");
		String cantidad = request.getParameter("cantMaterias");

		List<CantidadMateriaPrimaDTO> materiascargadas = (List<CantidadMateriaPrimaDTO>) session.getAttribute("materiasPrimasCargadas");

		if (materiascargadas==null)
		{
			materiascargadas = new ArrayList<CantidadMateriaPrimaDTO> () ;
		}

		CantidadMateriaPrimaDTO cmp = new CantidadMateriaPrimaDTO();

		try {
			MateriaPrimaDTO mat = FacadeBusinessDelegate.getInstance().getMateriaPrimaByRef(materia);
			cmp.setCantidad(Float.parseFloat(cantidad));
			cmp.setMateriaPrima(mat);
			materiascargadas.add(cmp);
		} catch (NamingException e1) {
			e1.printStackTrace();
		}

		session.setAttribute("materiasPrimasCargadas", materiascargadas);

		RequestDispatcher dispatcher = request.getRequestDispatcher("/nuevoArticulo.jsp");

		try {
			dispatcher.forward(request, response);
		} catch (ServletException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	@SuppressWarnings("unchecked")
	public void guardarArticulo (HttpServletRequest request, HttpServletResponse response)
	{
		HttpSession session = request.getSession(true);

		ArticuloDTO art = (ArticuloDTO) session.getAttribute("articuloParseado");

		art.setCantidadMateriasPrimas((List<CantidadMateriaPrimaDTO>) session.getAttribute("materiasPrimasCargadas"));

		String tiempoFab = request.getParameter("tiempofabricacion");
		
		if(tiempoFab.length()==0){
			tiempoFab = "0";
		}
		
		art.setTiempoFabricacion(Integer.parseInt(tiempoFab));
		
		try {
			FacadeBusinessDelegate.getInstance().ingresarNuevoArticulo(art);
		} catch (NamingException e) {
			e.printStackTrace();
		}
		
		RequestDispatcher dispatcher = request.getRequestDispatcher("/articuloCargado.jsp");
		
		try {
			dispatcher.forward(request, response);
		} catch (ServletException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void leerArchivo (HttpServletRequest request, HttpServletResponse response)
	{
		HttpSession session = request.getSession(true);

		String path = request.getParameter("patharchivo");
		ArticuloDTO articulo = null;

		if (path != null) {
			ParserXML parser = new ParserXML();
			File archivo = new File(path);
			articulo = parser.getArticuloDTO(archivo);
		}

		session.setAttribute("articuloParseado", articulo);

		List<MateriaPrimaDTO> lista = new ArrayList<MateriaPrimaDTO>();

		// TRAIGO LA LISTA DE MATERIAS PRIMAS DE LA BASE
		try {
			lista = FacadeBusinessDelegate.getInstance().getMateriasPrimas();
		} catch (NamingException e1) {
			e1.printStackTrace();
		}

		session.setAttribute("listameriasprimas", lista);

		RequestDispatcher dispatcher = request.getRequestDispatcher("/nuevoArticulo.jsp");

		try {
			dispatcher.forward(request, response);
		} catch (ServletException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
